package com.lmf.annotation;

import com.alibaba.druid.pool.DruidDataSource;
import com.lmf.annotation.config.MyConfigOfProfile;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * 测试 @Profile注解，在不同环境下的数据源配置使用
 */

public class IOCTest_BeanProfile {
    //方式一：根据命令行参数激活环境
    //在vm options里面加上参数：-Dspring.profiles.active=test   test:环境标识
    @Test
    public void test_1() {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfigOfProfile.class);
        String[] names = context.getBeanNamesForType(DruidDataSource.class);
        for (String name : names) {
            System.out.println(name);
            System.out.println("--------------------------");
            DruidDataSource bean = context.getBean(name, DruidDataSource.class);
            System.out.println("名称："+name+"\n"+bean);
        }
        context.close();
    }
    //方式二：通过写代码，来激活某种环境
    @Test
    public void test_2() {
        // 1. 使用无参构造器创建一个IOC容器
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
        // 2. 在我们容器还没启动创建其他bean之前，先设置需要激活的环境（可以设置激活多个环境哟）
        context.getEnvironment().setActiveProfiles("prod","dev");
        // 3. 注册主配置类
        context.register(MyConfigOfProfile.class);
        // 4. 启动刷新容器
        context.refresh();
        //5.打印容器里面的注册类
        String[] names = context.getBeanNamesForType(DruidDataSource.class);
        for (String name : names) {
            System.out.println(name);
            System.out.println("--------------------------");
            DruidDataSource bean = context.getBean(name, DruidDataSource.class);
            System.out.println("名称："+name+"\n"+bean);
        }
        context.close();
    }
    //测试：@Profile("lmf")注解，加在类上面
    @Test
    public void test_3() {
        // 1. 使用无参构造器创建一个IOC容器
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
        // 2. 在我们容器还没启动创建其他bean之前，先设置需要激活的环境（可以设置激活多个环境哟）
            //中间要加上类上面的环境标识，再包含其他环境标识，不然无效
        context.getEnvironment().setActiveProfiles("lmf","prod","dev");
        // 3. 注册主配置类
        context.register(MyConfigOfProfile.class);
        // 4. 启动刷新容器
        context.refresh();
        //5.打印容器里面的注册类
        String[] names = context.getBeanNamesForType(DruidDataSource.class);
        for (String name : names) {
            System.out.println(name);
            System.out.println("--------------------------");
            DruidDataSource bean = context.getBean(name, DruidDataSource.class);
            System.out.println("名称："+name+"\n"+bean);
        }
        context.close();
    }

}
